home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 12 / BBS in a box XII-1.iso / Files / Util / After Dark / The Swarm 1.0.sit / The Swarm 1.0 / Source (THINK C 6.0) / fade.c / fade.c
Encoding:
Text File  |  1994-03-14  |  4.1 KB  |  163 lines  |  [TEXT/R*ch]

  1. /********************************************************************************
  2.          Copyright  ©  N. Jonas Englund, 1993.    All Rights Reserved.
  3.  ********************************************************************************
  4.  
  5.      PROJECT:    clut_fade.π
  6.      
  7.      FILE:        fade.c
  8.      
  9.      PURPOSE:    'clut' fading functions
  10.  
  11.  ********************************************************************************/
  12.  
  13. //================================= INCLUDES ====================================
  14.  
  15. #include "fade.h"
  16.  
  17. //================================= FUNCTIONS ===================================
  18.  
  19. void copy_cluts     (GDHandle);
  20. void calc_fade     (short, FadeValues*);
  21. void fade_out     (short, FadeValues);
  22. void fade_in     (short, FadeValues);
  23. void black_out     (void);
  24. void restore_clut(void);
  25.  
  26. //================================== GLOBALS ====================================
  27.  
  28. CTabHandle     gFade,            // 'clut' to alter with fading functions
  29.             gOrig;            // 'clut' to hold a copy of original
  30. Handle        gTempH;            //  temporary handle to copy 'clut'
  31.  
  32. /********************************** fade_screen *********************************/
  33. extern
  34. void fade_screen(short speed, Boolean fadeOut)
  35. {
  36.     GDHandle     oldDev, hGD;
  37.     FadeValues    rgbs;
  38.     
  39.     oldDev = GetGDevice();
  40.     hGD = GetMainDevice();
  41.     SetGDevice(hGD);
  42.     
  43.     copy_cluts(hGD);
  44.     calc_fade(speed, &rgbs);
  45.  
  46.     if (fadeOut)
  47.         fade_out(speed, rgbs);
  48.     else
  49.         fade_in(speed, rgbs);
  50.  
  51.     restore_clut();
  52.     SetGDevice(oldDev);
  53.  
  54.     DisposeHandle(gTempH);
  55. }
  56. /*** fade_screen ***/
  57.  
  58. /********************************** copy_cluts **********************************/
  59. static
  60. void copy_cluts(GDHandle hGD)
  61. {    
  62.     gFade = (*(*hGD)->gdPMap)->pmTable;
  63.     gTempH = (Handle) (*(*hGD)->gdPMap)->pmTable;
  64.     HandToHand(&gTempH);
  65.     gOrig = (CTabHandle) gTempH;
  66.     
  67.     HLock((Handle) gFade);
  68.     HLock((Handle) gOrig);
  69. }
  70.  
  71. /*********************************** calc_fade **********************************/
  72. static
  73. void calc_fade(short speed, FadeValues *rgbs)
  74. {
  75.     short    i;
  76.     
  77.     for (i = 0; i < MAXBYTE; i++)
  78.     {
  79.         rgbs->reds[i]   = (*gFade)->ctTable[i].rgb.red   / speed;
  80.         rgbs->greens[i] = (*gFade)->ctTable[i].rgb.green / speed;
  81.         rgbs->blues[i]  = (*gFade)->ctTable[i].rgb.blue  / speed;
  82.     }
  83. }
  84.  
  85. /*********************************** fade_out ***********************************/
  86. static
  87. void fade_out(short speed, FadeValues rgbs)
  88. {
  89.     short     i, j;
  90.     
  91.     for (j = speed; j >= 0; j--)
  92.     {
  93.         for (i = 0; i < MAXBYTE; i++)
  94.         {
  95.             if ((*gFade)->ctTable[i].rgb.red   > rgbs.reds[i])
  96.                 (*gFade)->ctTable[i].rgb.red   -= rgbs.reds[i];
  97.             if ((*gFade)->ctTable[i].rgb.green > rgbs.greens[i])
  98.                 (*gFade)->ctTable[i].rgb.green -= rgbs.greens[i];
  99.             if ((*gFade)->ctTable[i].rgb.blue  > rgbs.blues[i])
  100.                 (*gFade)->ctTable[i].rgb.blue  -= rgbs.blues[i];
  101.         }
  102.         SetEntries(0,  MAXBYTE-1, (*gFade)->ctTable);
  103.     }
  104.     black_out();
  105. }
  106.  
  107. /************************************ fade_in ***********************************/
  108. static
  109. void fade_in(short speed, FadeValues rgbs)
  110. {
  111.     short     i, j;
  112.     
  113.     black_out();
  114.  
  115.     for (j = 0; j < speed; j++)
  116.     {
  117.         for (i = 0; i < MAXBYTE; i++)
  118.         {
  119.             if ((*gFade)->ctTable[i].rgb.red   < (*gOrig)->ctTable[i].rgb.red)
  120.                 (*gFade)->ctTable[i].rgb.red   += rgbs.reds[i];
  121.             if ((*gFade)->ctTable[i].rgb.green < (*gOrig)->ctTable[i].rgb.green)
  122.                 (*gFade)->ctTable[i].rgb.green += rgbs.greens[i];
  123.             if ((*gFade)->ctTable[i].rgb.blue  < (*gOrig)->ctTable[i].rgb.blue)
  124.                 (*gFade)->ctTable[i].rgb.blue  += rgbs.blues[i];
  125.         }
  126.         SetEntries(0, MAXBYTE-1, (*gFade)->ctTable);
  127.     }
  128. }
  129.  
  130. /*********************************** black_out **********************************/
  131. static
  132. void black_out(void)
  133. {
  134.     short     i;
  135.     
  136.     for (i = 0; i < MAXBYTE; i++)
  137.     {
  138.         (*gFade)->ctTable[i].rgb.red   = 0;
  139.         (*gFade)->ctTable[i].rgb.green = 0;
  140.         (*gFade)->ctTable[i].rgb.blue  = 0;
  141.     }
  142.     SetEntries(0, MAXBYTE-1, (*gFade)->ctTable);
  143. }
  144.  
  145. /********************************** restore_clut ********************************/
  146. static
  147. void restore_clut(void)
  148. {
  149.     short     i;
  150.     
  151.     for (i = 0; i < MAXBYTE; i++)
  152.     {
  153.         (*gFade)->ctTable[i].rgb.red   = (*gOrig)->ctTable[i].rgb.red;
  154.         (*gFade)->ctTable[i].rgb.green = (*gOrig)->ctTable[i].rgb.green;
  155.         (*gFade)->ctTable[i].rgb.blue  = (*gOrig)->ctTable[i].rgb.blue;
  156.     }
  157.     (*gFade)->ctSeed = GetCTSeed();
  158.     MakeITable(nil, nil, 0);
  159.     
  160.     HUnlock((Handle) gFade);
  161.     HUnlock((Handle) gOrig);
  162. }
  163.